package com.yundingai.controller;

import com.yundingai.domain.dto.FriendRequestDTO;
import com.yundingai.domain.dto.RecommendUserDTO;
import com.yundingai.domain.dto.UserDTO;
import com.yundingai.service.FriendService;
import com.yundingai.service.RecommendService;
import com.yundingai.vm.ResponseResult;
import com.yundingai.vm.enums.ResultStatusEnum;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
/**
 * @Author HuangZhengmin
 * @desc 好友社交模块
 * @Date 2025/7/22 14:47
 * @Version 1.0
 */
@Slf4j
@RestController
@RequestMapping("/social")
public class SocialController {
  @Autowired
  private RecommendService recommendService;
  @Autowired
  private FriendService friendService;
  @GetMapping("/recommendations/{userId}")
  // 根据用户ID和限制数量获取推荐用户列表
  public ResponseResult<List<RecommendUserDTO>> getRecommendations(
          // 默认限制数量为10
          @RequestParam(defaultValue = "10") int limit,
          // 从pinia里面获取
          @PathVariable Integer userId) {
    try {
      // 调用推荐服务获取推荐用户列表
      List<RecommendUserDTO> recommendations = recommendService.getRecommendations(userId, limit);
      // 返回推荐用户列表
      return ResponseResult.okResult(recommendations);
    } catch (IllegalArgumentException e) {
      // 参数无效时返回错误信息
      return ResponseResult.errorResult(ResultStatusEnum.PARAM_INVALID.getCode(), e.getMessage());
    } catch (Exception e) {
      // 系统错误时返回错误信息
      return ResponseResult.errorResult(ResultStatusEnum.SYSTEM_ERROR.getCode(), "获取推荐失败");
    }
  }
  @PostMapping("/friend-request")
  // 发送好友请求
  public ResponseResult<Void> sendFriendRequest(@RequestBody FriendRequestDTO friendRequestDTO) {
    try {
      // 调用好友服务发送好友请求
      friendService.sendFriendRequest(friendRequestDTO.getFromUserId(), friendRequestDTO.getToUserId());
      // 返回成功结果
      return ResponseResult.okResult();
    } catch (IllegalArgumentException e) {
      // 参数无效，返回错误结果
      return ResponseResult.errorResult(ResultStatusEnum.PARAM_INVALID.getCode(), e.getMessage());
    } catch (Exception e) {
      // 系统错误，返回错误结果
      return ResponseResult.errorResult(ResultStatusEnum.SYSTEM_ERROR.getCode(), "发送好友请求失败");
    }
  }
  @GetMapping("/friend-requests/{userId}")
  // 根据用户ID获取好友请求
  public ResponseResult<List<FriendRequestDTO>> getFriendRequests(
          @PathVariable Integer userId) {
    try {
      // 调用friendService获取好友请求
      List<FriendRequestDTO> requests = friendService.getFriendRequests(userId);
      // 返回好友请求
      return ResponseResult.okResult(requests);
    } catch (Exception e) {
      // 返回错误信息
      return ResponseResult.errorResult(ResultStatusEnum.SYSTEM_ERROR.getCode(), "获取好友请求失败");
    }
  }
  @PostMapping("/friend-request/{requestId}/respond/{userId}")
// 处理好友请求
  public ResponseResult<Void> respondToFriendRequest(
          @PathVariable Integer requestId,
          @RequestBody FriendRequestDTO friendRequestDTO,
          @PathVariable Integer userId) {
    log.info("处理好友请求: requestId={}, userId={}, accept={}", requestId, userId, friendRequestDTO.getAccept());
    try {
      // 调用好友服务处理好友请求
      friendService.respondToFriendRequest(requestId, userId, friendRequestDTO.getAccept());
      // 返回成功结果
      return ResponseResult.okResult();
    } catch (IllegalArgumentException e) {
      // 参数无效，返回错误结果
      log.error("参数无效: {}", e.getMessage());
      return ResponseResult.errorResult(ResultStatusEnum.PARAM_INVALID.getCode(), e.getMessage());
    } catch (Exception e) {
      // 系统错误，返回错误结果
      log.error("系统错误: ", e); // 打印完整异常堆栈
      return ResponseResult.errorResult(ResultStatusEnum.SYSTEM_ERROR.getCode(), "处理好友请求失败");
    }
  }
  @GetMapping("/myFriends/{userId}")
  public ResponseResult<List<UserDTO>> getMyFriends(@PathVariable Integer userId) {
    log.info("获取我的好友: userId={}", userId);
    try {
      // 调用好友服务获取我的好友列表
      List<UserDTO> friends = friendService.getMyFriends(userId);
      // 返回好友列表
      return ResponseResult.okResult(friends);
    } catch (IllegalArgumentException e) {
      // 参数无效，返回错误结果
      log.error("参数无效: {}", e.getMessage());
      return ResponseResult.errorResult(ResultStatusEnum.PARAM_INVALID.getCode(), e.getMessage());
    } catch (Exception e) {
      // 系统错误，返回错误结果
      log.error("系统错误: ", e); // 打印完整异常堆栈
      return ResponseResult.errorResult(ResultStatusEnum.SYSTEM_ERROR.getCode(), "获取我的好友失败");
    }
  }
}
